home *** CD-ROM | disk | FTP | other *** search
- include "toseq.inc"
-
- import system
- export csystem
-
- *
- * csystem(str)
- *
- csystem: move.l A0,ToPutIs ; str
-
- ; install new handler
- pea NewTrap
- move.w #trap1>>2,-(a7)
- move.w #Setexc,-(a7)
- trap #BIOS
- addq.l #8,a7
- move.l d0,OldTrap
-
- ; call interactive system
- lea empty,a0
- bra system
-
- OldSp: dc.l 0
- StatusReg: dc.w 0
- dc.l "XBRA"
- dc.l "CSYS"
- OldTrap: dc.l 0
- NewTrap:
- move.w sr,StatusReg
- ori.w #0x700,sr ; lock interrupts
- move.l a7,OldSp
- btst #13,(a7) ; call from user mode ?
- bne handler ; no -> a7 ok
- move.l usp,a0 ; put parameter on user stack
- move.l 2(a7),-(a0) ; pc
- move.w (a7),-(a0) ; sr
- move.l a0,a7
-
- handler: move.w StatusReg,sr
- move.w 6(a7),d0 ; functioncode
-
- ; check for valid function
- cmp.w #Cconis,d0
- beq NewCconis
- cmp.w #Crawcin,d0
- beq NewCrawcin
-
- OldFunction: move.l OldSp,a0
- move.w (a7),(a0) ; sr
- move.l 2(a7),2(a0) ; pc
- move.l a0,a7
-
- move.l OldTrap,a0
- jmp (a0)
-
- NewCconis:
- move.l ToPutIs,a0
- tst.b (a0)
- beq ThereWasNo
- move.b #1,d0
- bra TrapExit
-
- NewCrawcin:
- move.l ToPutIs,a0
- move.b (a0)+,d0
- bne ThereWasOne
- ThereWasNo:
- move.l OldTrap,trap1
- bra OldFunction
- ThereWasOne:
- move.l a0,ToPutIs
-
- TrapExit: move.l OldSp,a0
- move.w (a7),(a0) ; sr
- move.l 2(a7),2(a0) ; pc
- move.l a0,a7
- rte
-
- ToPutIs: dc.l 0
- empty: dc.b 0
-